在前兩天的介紹裡,我們說明了協同過濾法的作法,這種做法雖然直覺簡單,但無論是 UserCF 或 ItemCF 它[ 都要維護一個很大的評分表,並且這個評分表是個稀疏矩陣。
要在這麼大的矩陣做相似性的計算,最後預測評分,這在效能和記憶體都是一大考驗,要怎麼改善這一點呢?
我們可以這樣想:無論它是一個多大的矩陣,它都可以拆成 2 個矩陣相乘。
假設R為評分表矩陣,且我們可以找到U矩陣及I矩陣人使得 R = U x I
那麼要是 R 為 m x n 維,那 U 為 m x k 維,I 為 k x n 維。這時若我們要R 的內容,我們根本不需要R,我們只需要拿U的部份資料和 I 的部份資料做計算,就可以拿到了。這樣馬上可以省下不少空間。
剩下來的問題就是 U 和 I 要怎麼找到。我們要找矩陣的分解,通常有 3 種找法:
這3種的適用性,分別討論如下: